﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace GIFT
{
    public partial class VentanaTexto : Form
    {
        //Constructor de la clase
        public VentanaTexto(String nombre, InterfazPrincipal vPrincipal)
        {
            controlTexto = new ControlTexto();
            modificado = false;
            Principal = vPrincipal;
            Nombre = nombre; //pone el nombre
            InitializeComponent();
            this.Name = Nombre;
            this.Text = Nombre;
            campoNombreTexto.Text = Nombre;
            campoActualizacionTexto.Text = DateTime.Now.ToString();
        }

        ///Metodos set

        //El valor al campo correlativo
        public void setCorrelativo(String correlativo)
        {
            campoCorrelativoTexto.Text = correlativo;
        }

        //El valor al campo nombre
        public void setNombre(String nombre)
        {
            campoNombreTexto.Text = nombre;
        }

        //El valor al campo descripcion
        public void setDescripcion(String descripcion)
        {
            campoDescripcionTexto.Text = descripcion;
        }

        //El valor al campo fecha actualizacion
        public void setActualizacion(String fechaActualizacion)
        {
            campoActualizacionTexto.Text = fechaActualizacion;
        }

        //El valor al campo largo
        public void setLargo(String largo)
        {
            campoLargoTexto.Text = largo;
        }


        //El valor al campo defecto
        public void setDefecto(String defecto)
        {
            campoDefectoTexto.Text = defecto;
        }

        //Metodos Get

        //Retorna el valor al campo correlativo
        public String getCorrelativo()
        {
            return campoCorrelativoTexto.Text;
        }

        //Retorna el  valor al campo nombre
        public String getNombre()
        {
            return Nombre;
        }

        //Retorna el  valor al campo descripcion
        public String getDescripcion()
        {
            return campoDescripcionTexto.Text;
        }

        //Retorna el  valor al campo fecha actualizacion
        public String getActualizacion()
        {
            return campoActualizacionTexto.Text;
        }

        //Retorna el  valor al campo mascara
        public String getLargo()
        {
            return campoLargoTexto.Text;
        }

        //Retorna el  valor al campo defecto
        public String getDefecto()
        {
            return campoDefectoTexto.Text;
        }

        //Cambia la habilitacion del boton guardar
        public void habilitacionBotonGuardar(bool habilitacion)
        {
            botonGuardarTexto.Enabled = habilitacion;
        }

        //Captura el click en el boton cerrar el form
        private void botonCerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        //Captura el click en el boton borrar de el form
        private void botonEliminar_Click(object sender, EventArgs e)
        {
            borrarArchivo();
        }

        //Captura el click en el boton guardar de el form
        private void botonGuardar_Click(object sender, EventArgs e)
        {
            guardarArchivo();//manda a guardar el archivo
        }

        //Captura el click en el boton guardarComo de el form
        private void botonGuardarComo_Click(object sender, EventArgs e)
        {
            hacerCopia();
        }

        //Captura el evento que suceda antes de cerrar la ventana
        private void click_cerrarVentana(object sender, FormClosingEventArgs e)
        {
            if (modificado)
            {
                guardarArchivo();
            }
            Principal.ventanaEnfocada(null, ""); //Manda a quitarse como la enfocada
        }

        //Se da cuenta cuando se hicieron cambios
        public void seHicieronCambios(object sender, System.Windows.Forms.KeyPressEventArgs e)
        {
            this.modificado = true;
            botonGuardarTexto.Enabled = true;
        }

        //Se da cuenta cuando se hicieron cambios
        private void seHicieronCambios(object sender, EventArgs e)
        {
            if (Principal.estaAbierta(Nombre))
            {
                this.modificado = true;
                botonGuardarTexto.Enabled = true;
            }
        }

        //Manda a guardar un archivo
        public void guardarArchivo()
        {
            //confirma el guardado
            DialogResult dr = MessageBox.Show("Desea guardar los cambios de " + Nombre + "?", "Guardar", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            switch (dr)
            {
                case DialogResult.Yes: //en caso de que desee guardar
                    if (controlTexto.existe(Nombre))//Si nada mas se desean guardar los cambios
                    {
                        controlTexto.modificar(getNombre(), getDescripcion(),getLargo(),getDefecto());
                    }
                    else //Si no se habia guardado antes en la base de datos
                    {
                        controlTexto.crearNuevo(getNombre(), getDescripcion(), getLargo(), getDefecto());
                        TreeNode tnode = new TreeNode(Nombre);
                        tnode.ContextMenuStrip = Principal.ClickDerechoArbolPrincipalNodoSecundario;
                        Principal.GetTreeView().Nodes[0].Nodes[0].Nodes[3].Nodes.Add(tnode); //Agrega el nodo
                    }
                    Principal.habilitacionCampos();
                    this.modificado = false;
                    this.botonGuardarTexto.Enabled = false;
                    break;
                case DialogResult.No: break;
            }
        }

        //Manda a hacer una copia del numero
        public void hacerCopia()
        {
            GuardarComo guardar = new GuardarComo(Principal, "texto", this);
            guardar.Show();
        }

        //Manda a borrar el archivo
        public void borrarArchivo()
        {
            //confirma el borrado
            DialogResult dr = MessageBox.Show("Está seguro que desea borrar el texto?", "Borrar texto", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            switch (dr)
            {
                case DialogResult.Yes: //en caso de que desee borrarlo
                    controlTexto.borrar(Nombre);
                    Principal.habilitacionCampos();
                    Principal.GetControlInterfaz().quitarNodo(Principal.GetTreeView(), Nombre, "texto");
                    this.Close();
                    break;
                case DialogResult.No: break;
            }
        }

        //Establece el largo maximo para el texto por defecto
        void campoLargoTexto_ValueChanged(object sender, System.EventArgs e)
        {
            int largo = (int)campoLargoTexto.Value;
            campoDefectoTexto.MaxLength = largo;
            if (largo == 0) { campoDefectoTexto.Text = ""; }
            if (campoDefectoTexto.Text.Length > largo)
            {
                campoDefectoTexto.Text = campoDefectoTexto.Text.Remove(largo);
            }
        }

        //Captura el evento de cuando la ventana es enfocada
        private void VentanaEnfocada(object sender, EventArgs e)
        {
            Principal.ventanaEnfocada(this, "texto"); //Manda a ponerse como la enfocada
        }

        //Captura el evento de cuando la ventana es desenfocada
        private void VentanaDesenfocada(object sender, EventArgs e)
        {
            Principal.ventanaEnfocada(null, ""); //Manda a quitarse como la enfocada
        }


    }//Fin de la clase
}
